package q200_numIslands;

public class Solution_1 {
//    int[] dx = {1, 0, 0, -1};
//    int[] dy = {0, 1, -1, 0};
    // 这次我们尝试直接在dfs中写好四个方向 不利用循环判断

    int count = 0;
    public int numIslands(char[][] grid) {

        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if (grid[i][j] == '1') {
                    dfs(grid, i, j);
                    count++;
                }
            }
        }
        return count;
    }

    private void dfs(char[][] grid, int r, int c) {
        // 注意 这种或判断 是先从前向后判断的 所以数组溢出的判断条件一定要在前面 最后判断是否为0
        if (r < 0 || c < 0 || r >= grid.length || c >= grid[0].length || grid[r][c] == '0') {
            return;
        }

        grid[r][c] = '0';
        // 向四个方向"沉岛"
        // 这里就不使用方向了 解法更为清晰
        dfs(grid, r + 1, c);
        dfs(grid, r, c + 1);
        dfs(grid, r - 1, c);
        dfs(grid, r, c - 1);
    }
}
